package reflect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 注解是JDK5推出时推出的一个特性，可以辅助我们在反射机制中操作对象使用
 * java内置了很多注解，不同的注解也有不同的作用
 * 例如：
 * @Override：该注解是标注在方法上的，用于告知编译器此方法是重写的超类
 *             方法，如果该方法的声明与超类不符合时，编译器会提示错误.
 *
 * 注解的声明：
 * public @interface 注解名{
 *     参数类型 参数名();
 *      ...
 * }
 *
 * 使用注解的语法：
 * @注解名
 * 如果注解定义了参数，可以在使用时传入参数
 * @注解名(实参)
 *
 * 声明注解时有两个注解是用来给注解标注信息的：
 * @Target：声明该注解用来标注的位置，例如：方法，类上等等
 * @Retention：声明该注解保留的级别
 *          可选取的值在枚举类型RetentionPolicy中定义，我们定义的
 *          注解通常只选取RUNTIME，这个级别表示该注解会被保留在编译
 *          后的class文件中并且可供反射机制获取及操作
 *
 */

/*
需要同时在多个地方使用该注解时，应当如下传参给Target
@Target({ElementType.TYPE,ElementType.METHOD,...})
这里的{}是数组的静态初始化，相当于传入一个数组，包含多个可标注位置。
 */
@Target(ElementType.TYPE)//仅在类上使用该注解
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {

}
